#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N=2e5+10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
int n,m;
int r,c;
char a[60][60];
//int row[60],col[60];
//int a_row[60],a_col[60];
void solve()
{
	cin>>n>>m;
	cin>>r>>c;
	// memset(row, 0,sizeof row);
	// memset(col, 0 ,sizeof col);
	// memset(a_row, 0 ,sizeof a_row);
	// memset(a_col, 0 ,sizeof a_col);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}

	// for(int i=1;i<=n;i++)
	// {
	// 	bool ok=true;
	// 	for(int j=1;j<=m;j++)
	// 	{
	// 		if(a[i][j]=='B') row[i]=1;
	// 		else ok=false;
	// 	}
	// 	if(ok) a_row[i]=1;
	// }


	// for(int i=1;i<=m;i++)
	// {
	// 	bool ok=true;
	// 	for(int j=1;j<=n;j++)
	// 	{
	// 		if(a[j][i]=='B') col[i]=1;
	// 		else ok=false;
	// 	}
	// 	if(ok) a_row[i]=1;
	// }

	// bool ok1=true;
	// int cnt1=0;
	// for(int i=1;i<=r;i++)
	// {
	// 	if(row[i]==0) {ok1=false;}
	// 	if(a_row[i]==1) cnt1++;
	// }

	// bool ok2=true;
	// int cnt2=0;
	// for(int j=1;j<=c;j++)
	// {
	// 	if(col[j]==0) {ok2=false;}
	// 	if(a_col[j]==1) cnt2++;
	// }

	// if(!ok1&&!ok2)
	// {
	// 	cout<<-1<<'\n';
	// 	return;
	// }

	// int ans1=0x3f3f3f3f,ans2=0x3f3f3f3f;
	// if(ok1) ans1=r-cnt1;
	// if(ok2) ans2=r-cnt2;
	// cout<<min(ans1,ans2)<<'\n';


	bool ok=false;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]=='B') ok=true;
		}
	}
	if(!ok) {cout<<-1<<'\n';return;}

	if(a[r][c]=='B') cout<<0<<'\n';
	else
	{
		bool ok2=false;
		for(int i=1;i<=m;i++) if(a[r][i]=='B') ok2=true;
		for(int j=1;j<=n;j++) if(a[j][c]=='B') ok2=true;
		if(ok2) cout<<1<<'\n';
		else cout<<2<<'\n';
	}





	
}

int main()
{
	close();
	int T; cin>>T;
	while (T--) solve();
	return 0;
}

//对于黑色单元格 行中所有单元格染成黑色
//列中所有单元格染成黑色

//r行c列中变成黑色的最小操作数